1. Field of the Invention
The present invention relates generally to methods for graphical layout and more particularly to methods for optimizing graphical layout resizing.
2. Description of Related Art
In the computing arts, two primary elements required for providing a user interface (“UI”) are development stage layout design and runtime layout during, for example, execution of an application. In designing a layout, a UI designer specifies locations of individual UI elements or widgets such as buttons, list boxes, edit boxes, custom controls, and so on.
Conventional systems often use a variety of mechanisms to specify widget locations that are later used during runtime to perform the actual UI layout. These range from WYSIWYG design tools allowing drag-n-drop placement of widgets to handwritten program code defining widget locations. Runtime UI layouts are either (i) fixed, (ii) dynamic, (iii) user adjustable, or (iv) some combination of those. A fixed UI uses the same layout definition for all cases or limits the layout dimensions to a certain size and is trivial to implement for runtime by using the source design throughout the software session. Any sort of dynamic UI poses the difficult problem of resizing or repositioning widgets to appropriate positions for arbitrary and otherwise unknown layout dimensions. Conventionally, in complex UI layouts, the only reasonable solution to this problem has been to hand code the dynamic layout logic. This hinders modification of the UI due to the complexity associated with integrating design changes into the underlying dynamic repositioning algorithm.
In some conventional systems, frameworks are implemented which specify the relationships between widgets, for example, tying the edge of one widget to another such that, when one widget is moved, those dependent on it move accordingly. Regardless of these tools, complex UI layouts involving multiple configurations require some amount of hand coding by a programmer to achieve user-friendly runtime results.
Layout logic describing how the boundaries for a widget change during a resize event is usually based on some combination of the following rules:                1) Leave the widget boundary in its current state.        2) Use a fixed boundary width or height for all layout sizes.        3) Variable boundary width or height filling a region of space.        4) Adjust the boundary relative to another boundary (possibly that of another widget), for example, having a constant offset from an edge.        5) Scale the boundary based on a percentage of the new dimensions derived from its current location and/or the single input layout definition.        
Due to such complexity, conventional software applications have little or no support for dynamic user interface layouts and employ fixed size layouts that result in dialog boxes or application windows that cannot be resized. Furthermore, in conventional systems, a preselected set of layout sizes are typically defined, such as 640×480, 800×600, 1280×1024 etc., and a layout definition is selected to match the runtime dimensions (this is commonly used in video game design and HTML). Additionally, conventional systems often have resizing logic moving widgets based on rules derived from a single layout definition; the culmination of these rules constitute the UI resizing function.